package main

import "fmt"

func main() {
	//一个数组，其中有许多重复数据。
	numbers := []int{1, 3, 5, 0, 1, 2, 4, 4, 0, 3, 2, 5, 3}

	fmt.Printf("排序前：%v\n", numbers)
	//统计数组长度
	length := len(numbers)

	//找出最大值
	maxNumber := numbers[0] //默认第一位最大
	//查找对比第二位及其以后的数字，找到最大。
	for i := 1; i < length; i++ {
		if maxNumber < numbers[i] {
			maxNumber = numbers[i]
		}
	}

	//用最大值创建一个数组
	counters := make([]int, maxNumber+1) //由于数组的下标从0开始，所以创建数组为 0 - （n-1），创建0-n的数组，需要n+1

	//开始计数
	for i := 0; i < length; i++ {
		counters[numbers[i]]++
	}

	exIndex := 0

	fmt.Println("统计数据：")
	//展开数组实现排序
	for number, count := range counters {
		fmt.Printf("统计到%d个：%d\n", count, number) //显示统计到的数据

		//展开数组实现排序
		for i := 0; i < count; i++ {
			numbers[exIndex] = number
			exIndex++
		}
	}
	//fmt.Printf("统计数据:\n", counters)
	fmt.Printf("排序后：%v\n", numbers)
}
